package com.smartbus.bus.service.impl;

import java.util.List;
import java.util.ArrayList;
import java.math.BigDecimal;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.smartbus.bus.mapper.BusStationsMapper;
import com.smartbus.bus.domain.BusStations;
import com.smartbus.bus.domain.dto.DispatchStationDTO;
import com.smartbus.bus.service.IBusStationsService;

/**
 * 公交站点信息，存储所有公交站点的基础信息和GPS坐标Service业务层处理
 * 
 * @author ruoyi
 * @date 2025-09-24
 */
@Service
public class BusStationsServiceImpl implements IBusStationsService 
{
    @Autowired
    private BusStationsMapper busStationsMapper;

    /**
     * 查询公交站点信息，存储所有公交站点的基础信息和GPS坐标
     * 
     * @param id 公交站点信息，存储所有公交站点的基础信息和GPS坐标主键
     * @return 公交站点信息，存储所有公交站点的基础信息和GPS坐标
     */
    @Override
    public BusStations selectBusStationsById(Long id)
    {
        return busStationsMapper.selectBusStationsById(id);
    }

    /**
     * 查询公交站点信息，存储所有公交站点的基础信息和GPS坐标列表
     * 
     * @param busStations 公交站点信息，存储所有公交站点的基础信息和GPS坐标
     * @return 公交站点信息，存储所有公交站点的基础信息和GPS坐标
     */
    @Override
    public List<BusStations> selectBusStationsList(BusStations busStations)
    {
        return busStationsMapper.selectBusStationsList(busStations);
    }

    /**
     * 新增公交站点信息，存储所有公交站点的基础信息和GPS坐标
     * 
     * @param busStations 公交站点信息，存储所有公交站点的基础信息和GPS坐标
     * @return 结果
     */
    @Override
    public int insertBusStations(BusStations busStations)
    {
        return busStationsMapper.insertBusStations(busStations);
    }

    /**
     * 修改公交站点信息，存储所有公交站点的基础信息和GPS坐标
     * 
     * @param busStations 公交站点信息，存储所有公交站点的基础信息和GPS坐标
     * @return 结果
     */
    @Override
    public int updateBusStations(BusStations busStations)
    {
        return busStationsMapper.updateBusStations(busStations);
    }

    /**
     * 批量删除公交站点信息，存储所有公交站点的基础信息和GPS坐标
     * 
     * @param ids 需要删除的公交站点信息，存储所有公交站点的基础信息和GPS坐标主键
     * @return 结果
     */
    @Override
    public int deleteBusStationsByIds(Long[] ids)
    {
        return busStationsMapper.deleteBusStationsByIds(ids);
    }

    /**
     * 删除公交站点信息，存储所有公交站点的基础信息和GPS坐标信息
     *
     * @param id 公交站点信息，存储所有公交站点的基础信息和GPS坐标主键
     * @return 结果
     */
    @Override
    public int deleteBusStationsById(Long id)
    {
        return busStationsMapper.deleteBusStationsById(id);
    }

    /**
     * 获取调度系统站点数据
     *
     * @return 调度站点数据集合
     */
    @Override
    public List<DispatchStationDTO> getDispatchStations()
    {
        List<BusStations> stationsList = busStationsMapper.selectBusStationsList(new BusStations());
        List<DispatchStationDTO> dispatchStations = new ArrayList<>();

        // 定义三条路线的站点坐标
        int[][] linePositions = {
            // 1号线站点 (y=200, 蓝色路线)
            {180, 200}, {280, 200}, {380, 200}, {480, 200}, {580, 200}, {680, 200},
            // 2号线站点 (y=300, 绿色路线)
            {180, 300}, {280, 300}, {380, 300}, {480, 300}, {580, 300}, {680, 300},
            // 3号线站点 (y=400, 红色路线)
            {180, 400}, {280, 400}, {380, 400}, {480, 400}, {580, 400}, {680, 400}
        };

        String[] stationColors = {
            "#1890ff", "#1890ff", "#1890ff", "#1890ff", "#1890ff", "#1890ff", // 1号线蓝色
            "#52c41a", "#52c41a", "#52c41a", "#52c41a", "#52c41a", "#52c41a", // 2号线绿色
            "#f5222d", "#f5222d", "#f5222d", "#f5222d", "#f5222d", "#f5222d"  // 3号线红色
        };

        for (int i = 0; i < stationsList.size() && i < 18; i++) {
            BusStations station = stationsList.get(i);
            DispatchStationDTO dto = new DispatchStationDTO(
                station.getId(),
                station.getStationName(),
                station.getLongitude(),
                station.getLatitude()
            );

            // 使用预定义的坐标位置，确保站点沿直线排列
            dto.setMapX(linePositions[i][0]);
            dto.setMapY(linePositions[i][1]);

            dto.setColor(stationColors[i % stationColors.length]);
            dto.setStatus(station.getIsActive() == 1 ? "active" : "inactive");
            dto.setStationType(i % 6 == 0 ? "hub" : "normal");
            dto.setIsHub(i % 6 == 0);

            dto.setWaitingVehicles((int) (Math.random() * 3));
            dto.setEstimatedPassengers((int) (Math.random() * 20) + 5);

            dispatchStations.add(dto);
        }

        return dispatchStations;
    }

    /**
     * 获取站点实时状态
     *
     * @return 站点状态数据集合
     */
    @Override
    public List<DispatchStationDTO> getStationStatus()
    {
        List<DispatchStationDTO> statusList = getDispatchStations();

        for (DispatchStationDTO station : statusList) {
            station.setWaitingVehicles((int) (Math.random() * 5));
            station.setEstimatedPassengers((int) (Math.random() * 30) + 2);

            if (Math.random() > 0.9) {
                station.setStatus("crowded");
                station.setColor("#F56C6C");
            } else if (Math.random() > 0.7) {
                station.setStatus("busy");
                station.setColor("#E6A23C");
            } else {
                station.setStatus("normal");
                station.setColor("#67C23A");
            }
        }

        return statusList;
    }
}
